package com.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncodingFilter implements Filter {

	private FilterConfig filterConfig;
	private String encoding;
	
	/**
	 * 容器在销毁过滤器之前，会调用
	 * destroy方法，该方法只会执行一次。
	 */
	@Override
	public void destroy() {
		System.out.println("信息：拦截器EncodingFilter销毁(destroy)...");
	}

	/**
	 * 
	 */
	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain arg2) throws IOException, ServletException {
		System.out.println("信息：拦截器EncodingFilter开始处理(doFilter)...");
		// 取得页面提交的编码格式
		String post = request.getCharacterEncoding();
		if(post == null || post.length() <= 0){
			post = encoding;
		}
		//设置服务器解码格式(针对页面post提交有效)
		request.setCharacterEncoding(post);
		response.setCharacterEncoding(post);
//		//get请求 【中文处理】 1.配置容器编码格式(Tomcat) 2.取值
//		name = new String(name.getBytes("iso-8859-1"),"utf-8");
		
		//response.setContentType("text/html;charset="+post);
		response.setContentType("text/html;charset=utf-8");
		
			/*
			 * 没通过
			 */
//			// 2.转发
//			RequestDispatcher dispatcher = request.getRequestDispatcher("error/filter_error.jsp");
//			dispatcher.forward(request, response);
//	        return;//阻塞，直接返Web回客户端  
//	        // 3.重定向
//	        // 4.直接获取页面输出，然后输出
		
		//回调：调用后续的过滤器或者servlet。
		arg2.doFilter(request, response);
		
		System.out.println("信息：拦截器EncodingFilter结束处理(doFilter)...");
	}

	/**
	 * 容器一启动，就会将过滤器实例化，
	 * 接下来，容器会立即调用init方法。
	 * init方法只会执行一次。
	 * 容器会事先创建好一个符合FilterConfig接口要求的对象。
	 * FilterConfig提供了getInitParameter方法
	 * 来访问过滤器的初始化参数。
	 */
	@Override
	public void init(FilterConfig arg0) throws ServletException {
		System.out.println("信息：拦截器EncodingFilter初始化(init)......取得过滤器配置参数...");
		this.filterConfig = arg0;
		
		// 取得过滤器参数
		encoding = filterConfig.getInitParameter("encoding");
	}

}
